Problem
标签:灭绝树
DP
Solution
对于一个,存在一棵树使得这棵树上任意结点若被删除,则在原图上其所有子结点对应的结点都无法被到达。这棵树称为灭绝树。显然,如果构造出这棵灭绝树,则每个结点的灾难值等于其在灭绝树上的子树大小减一。
构建灭绝树需要用增量构造法。首先对原图进行拓扑排序,按拓扑序依次加入每个点。这样可以控制这个点的所有点都会在其加入之前被加入到灭绝树中。假想一个根,向所有入度为的点连边。对于新加入的点,其被所有先前控制这个点的点的所控制,即找到其所有“食物”的,从向这个点连边即可。这里需要支持动态加点求倍增数组和询问。构造总复杂度为(为原图总边数)。
建出灭绝树后,树形一遍,求出每个点的子树大小,即可求得其灾难值。
Code
1 |
|